package com.jzo2o.mvc.handler;

import cn.hutool.core.util.IdUtil;
import com.jzo2o.common.constants.HeaderConstants;
import com.jzo2o.common.handler.RequestIdHandler;
import com.jzo2o.common.model.CurrentUserInfo;
import com.jzo2o.common.utils.StringUtils;
import com.jzo2o.mvc.utils.RequestUtils;
import com.jzo2o.mvc.utils.UserContext;
import org.springframework.stereotype.Component;

/**
 * 请求ID处理器，负责获取或生成请求唯一标识
 */
@Component
public class RequestIdHandlerImpl implements RequestIdHandler {

    /**
     * 获取请求ID：优先从请求头获取，不存在则生成新ID（仅当用户上下文存在时）
     * @return 请求ID（用户未登录时返回null）
     */
    @Override
    public String getRequestId() {
        // 从请求header头中获取请求id,获取不到id，生成新的请求id
        CurrentUserInfo currentUserInfo = UserContext.currentUser();
        if(currentUserInfo == null) {
            return null;
        }
        // 从请求头获取请求ID
        String requestId = RequestUtils.getValueFromHeader(HeaderConstants.REQUEST_ID);
        // 若请求头中无ID，则生成雪花算法唯一ID
        if (StringUtils.isEmpty(requestId)) {
            return IdUtil.getSnowflakeNextIdStr();
        } else {
            return requestId;
        }
    }
}
